/*
 * Copyright (c) 2006 Washington University in St. Louis.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * - Redistributions of source code must retain the above copyright
 *   notice, this list of conditions and the following disclaimer.
 * - Redistributions in binary form must reproduce the above copyright
 *   notice, this list of conditions and the following disclaimer in the
 *   documentation and/or other materials provided with the
 *   distribution.
 * - Neither the name of the copyright holders nor the names of
 *   its contributors may be used to endorse or promote products derived
 *   from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
 * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/**
 * @author Kevin Klues (klueska@cs.wustl.edu)
 * @version $Revision: 1.3 $
 * @date $Date: 2010-06-29 22:07:42 $
 */

package net.tinyos.tools;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.text.SimpleDateFormat;

import net.tinyos.message.Message;
import net.tinyos.message.MessageListener;
import net.tinyos.message.MoteIF;
import net.tinyos.packet.BuildSource;
import net.tinyos.packet.PhoenixSource;
import net.tinyos.util.PrintStreamMessenger;

public class PrintLuo6 implements MessageListener {

	private MoteIF moteIF;
	private int USBnumStatic = 0;
	private int hum, tem, light;

	int usbnumber[] = { 53, 77, 74, 76, 49, 51, 52, 78, 50, 75, 35, 13, 14, 36,
			37, 38, 10, 11, 12, 34, 65, 42, 43, 41, 67, 66, 64, 40, 39, 68, 30,
			29, 9, 8, 6, 31, 5, 32, 33, 7, 25, 0, 1, 28, 4, 3, 24, 2, 27, 26,
			46, 44, 69, 72, 47, 45, 71, 73, 48, 70, 22, 23, 20, 21, 60, 61, 59,
			19, 62, 63, 18, 17, 56, 55, 16, 57, 58, 54 };

	char[] strtemp = new char[30];//
	String str;// pay attention!!
	public PrintLuo6(MoteIF moteIF, int usbnumstatic) {
		this.moteIF = moteIF;
		this.moteIF.registerListener(new PrintfMsg(), this);
		this.USBnumStatic = usbnumstatic;
	}

	public String char2String(char[] c) {
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < c.length; i++) {
			sb = sb.append(c[i]);
		}
		return sb.toString();
	}

	public void insertDB(String hum, String tem, String light) {
		SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd-HH:mm:ss");
		String curtime = formater.format(new java.util.Date());
		String driverName = "com.mysql.jdbc.Driver";
		String userName = "root";
		String userPasswd = "111533";
		String dbName = "myfirst";
		String tableName = "myfirst";
		String url = "jdbc:mysql://localhost/" + dbName + "?user=" + userName
				+ "&password=" + userPasswd;
		try {
			Class.forName("com.mysql.jdbc.Driver").newInstance();
			Connection connection = DriverManager.getConnection(url);
			Statement statement = connection.createStatement();
			String sql = "INSERT INTO sensor" + USBnumStatic
					+ " (usbnum,hum,tem,light,time) VALUES ( " + USBnumStatic
					+ ", " + hum + ", " + tem + ", " + light + ",  '" + curtime
					+ "');";
			statement.executeUpdate(sql);
			statement.close();
			connection.close();
		} catch (Exception e) {
			System.err.println(e.getClass().getName() + ":" + e.getMessage());
			System.exit(0);
		}
	}

	public void messageReceived(int to, Message message) {
		PrintfMsg msg = (PrintfMsg) message;
		for (int i = 0; i < PrintfMsg.totalSize_buffer(); i++) {
			char nextChar = (char) (msg.getElement_buffer(i));
			if (nextChar != 0) {
				// System.out.print(nextChar);
				strtemp[i] = nextChar;
			}
		}
		str = char2String(strtemp);
		String str1[] = str.split("@");

		String a = str1[0];
		String b = str1[1];
		String c = str1[2];
		insertDB(a, b, c);
	}

	private static void usage() {
		System.err.println("usage: PrintfClient [-comm <source>]");
	}

	public void mainfunction(String args1, String args2) throws Exception {
		String source = null;
		int USBnum = 0;
		// if (args.length == 2) {
		if (!args1.equals("-comm")) {
			usage();
			System.exit(1);
		}
		source = args2;
		if (source.charAt(19) != ':') {
			USBnum += source.charAt(19) - '0';
			USBnum += (source.charAt(18) - '0') * 10;
		} else {
			USBnum = source.charAt(18) - '0';
		}
		// USBnumStatic=USBnum;
		// }

		PhoenixSource phoenix;
		if (source == null) {
			phoenix = BuildSource.makePhoenix(PrintStreamMessenger.err);
		} else {
			phoenix = BuildSource.makePhoenix(source, PrintStreamMessenger.err);
		}
		System.out.print(phoenix);
		MoteIF mif = new MoteIF(phoenix);
		PrintLuo6 client = new PrintLuo6(mif, USBnum);
	}

	public static void main(String[] args) throws Exception {
		String source = null;
		int USBnum = 0;
		if (args.length == 2) {
			if (!args[0].equals("-comm")) {
				usage();
				System.exit(1);
			}
			source = args[1];
			if (source.charAt(19) != ':') {
				USBnum += source.charAt(19) - '0';
				USBnum += (source.charAt(18) - '0') * 10;
			} else {
				USBnum = source.charAt(18) - '0';
			}
			// USBnumStatic=USBnum;
		}

		PhoenixSource phoenix;
		if (source == null) {
			phoenix = BuildSource.makePhoenix(PrintStreamMessenger.err);
		} else {
			phoenix = BuildSource.makePhoenix(source, PrintStreamMessenger.err);
		}
		System.out.print(phoenix);
		MoteIF mif = new MoteIF(phoenix);
		PrintLuo6 client = new PrintLuo6(mif, USBnum);
	}
}
